package Transporter;

import item.Obiekt;
import item.Samochod;

import java.util.Arrays;
import java.util.List;
import java.util.Random;

import system.MySystem;

public class Transporter {
	int id;

	/* system z ktorego bedzie przeniesiony obiekt */
	MySystem from;

	/* system do ktorego bedzie przeniesiony obiekt */
	List<MySystem> to;

	/* tablica prawdopodobienstw przejsc */
	int[] probability;

	Obiekt samochod;
	MySystem systemTo;
	
	Random gen;

	public Transporter(MySystem from, List<MySystem> to, int[] probability) {
		this.from = from;
		this.to = to;
		this.probability = probability;
		this.gen = new Random(System.currentTimeMillis()+932);
		// Arrays.sort(this.probability);
	}

	public void transportSamochod(Samochod s) {
		if(isTransportPossible()) {
			System.out.println("Transport samochodu : "+s.dajID() + " do systemu: "+systemTo.getId());
			this.systemTo.getKolejka().dodaj(s);
			samochod = null;
			systemTo = null;
		}
	}

	public boolean isTransportPossible() {
//		return this.systemTo.getKolejka().czyPusty();
		if (this.systemTo.getPojemnoscSystemu() - this.systemTo.getKolejka().rozmiar() > 1) {
			return true;
		}
		return false;
	}

	/**
	 * uwaga zalozenie, ze sa jedna lub dwie sciezki
	 */
	public void wylosujSystem() {
		if (this.probability.length == 1) {
			this.systemTo = this.to.get(0);
		} else  {
			this.systemTo = this.to.get(losujSystem2());
		}
		System.out.println("______Wylosowano system: "+this.systemTo.getId());
	}
	
	public MySystem getSystemTo() {
		return this.systemTo;
	}
	
	public Obiekt getSamochod() {
		return samochod;
	}

	private int losujSystem2() {
		int poprzedniaSuma = 0;
		int suma = 0;
		int wynik = this.gen.nextInt(100);
		for(int i=0; i<probability.length; i++) {
			suma += probability[i];
			if(wynik >poprzedniaSuma && wynik <= suma) {
				return i;
			}
			else {
				poprzedniaSuma = suma;
			}
		}
		return 0;
	}

}
